import unittest
from selenium import webdriver
from HTMLTestRunner import HTMLTestRunner


class JXC_Login_Test(unittest.TestCase):

    # 在每个测试方法执行前，自动调用本方法
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.get('http://localhost/myweb/jxc/index.asp')

    # 在每个测试方法执行后，自动调用本方法
    def tearDown(self):
        self.driver.quit()

    def test_login_error(self):
        # 输入错误的用户名和密码
        self.driver.find_element_by_name('username').send_keys('abcd')
        self.driver.find_element_by_name('pwd').send_keys('12234')
        self.driver.find_element_by_name('enter').click()

        # 获取提示框中的提示文字
        alert = self.driver.switch_to.alert.text
        # 断言：应该弹出错误的提示信息
        # 提示信息中应该出现“。。。。密码错误!”这几个字
        self.assertIn('密码错误', alert)

    def test_login_ok(self):
        self.driver.find_element_by_name('username').send_keys('admin')
        self.driver.find_element_by_name('pwd').send_keys('admin')
        self.driver.find_element_by_name('enter').click()

        # 断言：登录是否成功
        #  依据：'后台管理系统'这几个字，出现在页面源代码中
        self.assertIn('后台管理系统', self.driver.page_source)


# 测试集合（套）：专门指定用例执行的顺序
def test_suite():
    # 定义一个测试集合
    suite = unittest.TestSuite()
    # 向测试集合中添加要执行的测试方法
    #  规范：类名("方法名")
    suite.addTest(JXC_Login_Test('test_login_error'))
    suite.addTest(JXC_Login_Test('test_login_ok'))
    return suite


# 指明一个测试报告文件 - HTML格式文件
with open('d:/rp.html', 'wb') as f:
    runner = HTMLTestRunner(stream=f, title='测试报告')
    runner.run(test_suite())
